package com.zsz.crm.settings.web.controller;

import com.zsz.crm.settings.domain.User;
import com.zsz.crm.settings.service.UserService;
import com.zsz.crm.settings.service.impl.UserServiceImpl;
import com.zsz.crm.utils.MD5Util;
import com.zsz.crm.utils.PrintJson;
import com.zsz.crm.utils.ServiceFactory;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class UserController extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("进入到用户控制器");

        //拿到的是url-pattern
        String path=request.getServletPath();

        if ("/settings/user/login.do".equals(path)){
            login(response,request);
        }else if ("/settings/user/xxx.do".equals(path)){
            //xxx(response,request)
        }
    }

    private void login(HttpServletResponse response, HttpServletRequest request) {
        System.out.println("进入到验证登录的操作");

        String loginAct=request.getParameter("loginAct");
        String loginPwd=request.getParameter("loginPwd");
        //将密码的明文形式转换为MD5的密文形式
        loginPwd= MD5Util.getMD5(loginPwd);
        //接受浏览器端的ip地址
        String ip=request.getRemoteAddr();
        System.out.println("----------ip:"+ip);

        //未来业务成开发，统一使用代理类形态的接口对象
        UserService userService= (UserService) ServiceFactory.getService(new UserServiceImpl());

        try{
            User user=userService.login(loginAct,loginPwd,ip);

            request.getSession().setAttribute("user",user);

            //如果程序执行到此处层没有为controller抛出任何的异常
            //表示登陆成功
            /*

              {"success" : true}

             */

            /*老方法自己拼字符串转换为json格式
            String str="{\"success\" : true}";
            response.getWriter().print(str);*/

            //新方法
            PrintJson.printJsonFlag(response,true);

        }catch (Exception e){
            e.printStackTrace();

            //一旦程序执行了catch块的信息，说明业务层为我们验证登录失败，为controller抛出了异常
            //表示登录失败

            /*

              {"success" : false,msg}

             */

            String msg=e.getMessage();
            /*

              我们现在作为controller,需要为ajax提供多项信息

              可以有两种手段来处理：
             （1）将多项信息打包成为map，将map解析为json串
             （2）创建一个Vo（为前端展现值的一个对象）
                 private boolean success;
                 private String msg;


              如果对于展现的信息将来还会大量的使用，我们创建一个vo类，使用方便
              如果对于展现的信息只有在这个需求中能够使用，我们使用map就可以了


             */
            Map<String,Object> map=new HashMap<String, Object>();
            map.put("success",false);
            map.put("msg",msg);
            PrintJson.printJsonObj(response,map);


        }


    }
}
